#include "bib_Log.h"

extern char nivelLog;

static int tiempo(char *);

int imprimirLog(char tipo, const char *cadena, const char *cadena1){

	/*FILE *archivo;
	char cadenaGuardada[2 * TAM_MAX];
	char cadenaImpresa[10 * TAM_MAX];*/
	char tipoMensaje[24 + 1];
	char hora[16 + 1];

	tiempo(hora);

	switch (tipo){

	case ERROR:
		strcpy(tipoMensaje, "ERROR:");
		break;

	case WARNING:
		if (nivelLog < WARNING)
			return FIN_OK;
		strcpy(tipoMensaje, "WARN:");
		break;

	case INFO:
		if (nivelLog < INFO)
			return FIN_OK;
		strcpy(tipoMensaje, "INFO:");
		break;

	case DETALLE:
		if (nivelLog < DETALLE){
			return FIN_OK;
		}
		strcpy(tipoMensaje, "DETALLE:");
		break;

	case DEBUG:
		if (nivelLog < DEBUG)
			return FIN_OK;
		strcpy(tipoMensaje, "DEBUG:");
		break;

	default:
		strcpy(tipoMensaje, "NIVEL detalle no valido:");
		break;
	}

	printf("[%lu] %s %s %s\n", pthread_self(), tipoMensaje, cadena, cadena1);

	/*sprintf(cadenaImpresa, "[%lu] %s %s %s \n", pthread_self(), tipoMensaje, cadena, cadena1);
	printf("%s", cadenaImpresa);
	sprintf(cadenaGuardada, "%s %s [%ld] %s", hora, PROCESO, getpid(), cadenaImpresa);

	if (!(archivo = fopen(ARCHIVO_LOG, "a"))){
		printf(ERROR_FATAL_LOG);
		printf("No se logro abrir el archivo Log.txt\n");
		return FIN_ERROR;
	}

	if (fprintf(archivo, "%s", cadenaGuardada) < 0){
		printf(ERROR_FATAL_LOG);
		printf("No se pudo escribir el mensaje %s\n", cadenaGuardada);
		return FIN_ERROR;
	}

	if (fclose(archivo)){
		printf(ERROR_FATAL_LOG);
		printf("Error al cerrar el archivo Log\n");
		return FIN_ERROR;
	}*/

	return FIN_OK;
}
/*=====================================================================================*/
static int tiempo(char *hora){
	time_t tiemp;
	struct tm *tmPtr;

	tiemp = time(NULL);
	tmPtr = localtime(&tiemp);
	strftime(hora, 20, "[%H:%M %d/%m/%y]", tmPtr); /*Arma la estructura a mostrar*/
	return FIN_OK;
}
/*=====================================================================================*/
int imprimirLogNumerico(char tipo, const char *cadena, int numero){

	char cadena1[30];
	
	sprintf(cadena1, "%d", numero);
	
	if (imprimirLog(tipo, cadena, cadena1))
		return FIN_ERROR;
	
	return FIN_OK;
}
